// https://leetcode.cn/problems/add-binary/

// 题干：给你两个二进制字符串 a 和 b ，以二进制字符串的形式返回它们的和。

// 示例：输入:a = "11", b = "1"
//      输出："100"

// 碎语：高精度加法，减法，乘法，除法
//       本质都是模拟，本题时模拟竖式加法

#include <bits/stdc++.h>
using namespace std;

class Solution
{
public:
    string addBinary(string a, string b)
    {
        string ret;
        int cur1 = a.size() - 1, cur2 = b.size() - 1, carry = 0;

        while (cur1 >= 0 || cur2 >= 0 || carry){
            if (cur1 >= 0) carry += a[cur1--] - '0';
            if (cur2 >= 0) carry += b[cur2--] - '0';
            ret += carry % 2 + '0';
            carry /= 2;
        }

        reverse(ret.begin(), ret.end());

        return ret;
    }
};

int main()
{
    Solution sol;
    string a = "11", b = "1";

    string index = sol.addBinary(a, b);
    cout << index << endl;
    
    return 0;
}